const mongoose = require('mongoose');
const Schema = mongoose.Schema
// 1.连接 MongoDB 数据库
// 指定连接的数据库不需要存在，当你插入第一条数据之后就会被自动创建
mongoose.connect('mongodb://localhost:27017/test', {useNewUrlParser: true, useUnifiedTopology: true});

/*  
    2.设计集合结构（表结构）
    字段名称就是表结构中的属性名称
    约束的目的是为了保证数据的完整性，不能有脏数据
*/
var userSchema = new Schema({
    username: {
        type: String,
        required: true
    },
    password: {
        type: String,
        required: true
    },
    tel: {
        type: String
    }
});
/*
    3.将文档结构发布为模型
    mongoose.model 方法就是用来将一个架构发布为 model
    第一个参数：传入一个大写名词单数字符串用来表示你的数据库名称
                mongoose 会自动将大写名词的字符串生成 小写复数 的集合
                eg. Blog 最终会变成 blogs 集合名称
    第二个参数：架构 Schema

*/
var User = mongoose.model('User', userSchema);

//  4.使用构造函数对 blogs 集合中的数据进行操作
//  4.1 添加数据
var admin = new User({
    username: 'admin222',
    password: '222',
    tel: '222'
})

// admin.save().then(data=>{
//     console.log(data)
// },err=>{
//     console.log(err.message)
// })

//  4.2 查询数据
// User.find().then(data=>{
//     console.log(data)
// })
let admin_username = 'admin3'
User.findOne({
    username: admin_username
}).then(data=>{
    if(data){
        console.log('用户已存在，请重新注册')
        // console.log(data)
    } else{
        return new User({
            username: admin_username,
            password: admin_username,
            tel: admin_username
        }).save()
    }
}).then(data=>{
    // console.log(data)
})

User.findOne().then(data=>{
    console.log(data)
})
  
//  4.3 删除数据
User.remove({
    username: 'admin2',
    password: '222'    
}).then(data=>{
    console.log('删除成功')
},err=>{
    console.log(res.message)
}) 
// User.deleteOne({
//     username: 'admin'
// }).then(data=>{
//     console.log('删除成功')
// },err=>{
//     console.log(err.message)
// })

//  4.4 更新数据、
// User.findByIdAndUpdate('5f1e52db85278520889a70bc',{
//     username: 'admin1'
// }).then(data=>{
//     console.log('update success!')
// },err=>{
//     console.log(err.message)
// })